{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-b0ffac263758>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "\n",
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.323926, the validation accuracy is 0.8754\n",
      "after 200 training steps, the loss is 0.337424, the validation accuracy is 0.8876\n",
      "after 300 training steps, the loss is 0.124797, the validation accuracy is 0.929\n",
      "after 400 training steps, the loss is 0.432319, the validation accuracy is 0.9156\n",
      "after 500 training steps, the loss is 0.139498, the validation accuracy is 0.9334\n",
      "after 600 training steps, the loss is 0.084841, the validation accuracy is 0.9426\n",
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.332302, the validation accuracy is 0.9476\n",
      "after 800 training steps, the loss is 0.249564, the validation accuracy is 0.9422\n",
      "after 900 training steps, the loss is 0.176355, the validation accuracy is 0.9532\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9517\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/jay/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "1.模型分了两层 输出10个结果\n",
    "2.用链式法则求梯度，反向传播更新w\n",
    "3.计算图就是定义了神经网络的结构\n",
    "4. （1）学习率可能还需要调整（2）学习次数可能还不够（3）数据量可能还不够多"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
